// 导入 express 模块
import express from "express";
// 创建 express 实例
const app = express();

// 导入cors中间件
import cors from "cors";
// 将cors注册为全局中间件
app.use(cors());

// 配置表单数据解析中间件
app.use(express.urlencoded({ extended: false }));

// 导入解析token的中间件
import expressJWT from "express-jwt";
// 导入配置文件
import config from "./config.js";
// 配置解析token中间件并指定哪些接口不需要进行token的身份验证
app.use(expressJWT({ secret: config.jwtSecretKey, algorithms: ['HS256'] }).unless({ path: [/^\/api/] }));

// 响应数据中间件
app.use((req, res, next) => {
    res.cc = (err, status = 1) => {
        res.send({
            status,
            message: err instanceof Error ? err.message : err
        })
    }
    next();
})

// 导入并注册用户路由模块
import { router } from "./router/user.js";
app.use('/api', router);

// 导入并注册用户信息路由模块
import { userInfoRouter } from "./router/userinfo.js";
app.use('/my', userInfoRouter);

// 导入joi验证模块
import joi from "joi";

// 设置错误中间件
app.use((err, req, res, next) => {
    // joi参数验证失败
    if (err instanceof joi.ValidationError) return res.cc(err);
    //捕获身份验证失败的错误
    if (err.name == 'UnauthorizedError') return res.cc('身份验证失败！');
    // 未知错误
    res.cc(err);
})

// 调用 app.listen 方法，指定端口号并启动服务器
app.listen(3090, () => {
    console.log('server running at http://127.0.0.1:3090');
})